import 'dart:convert';

import 'package:logger/logger.dart';

/// 创建多行 JSON
String prettyJson(dynamic json) {
  var spaces = ' ' * 4;
  var encoder = JsonEncoder.withIndent(spaces);
  return encoder.convert(json);
}

class LoggerService {
  static final Logger _logger = Logger(
    printer: MyLogPrinter(), // 使用自定义的日志打印器
  );

  static void logData(dynamic data) {
    _logger.d(data);
  }

  static void logInfo(String message) {
    _logger.i(message);
  }

  static void logWarning(String message) {
    _logger.w(message);
  }

  static void logError(String message, dynamic error) {
    final stackTrace = StackTrace.current;
    _logger.e('$message\n$error\n$stackTrace');
  }
}

class MyLogPrinter extends LogPrinter {
  @override
  List<String> log(LogEvent event) {
    final List<String> logStr = [];

    // 根据事件的级别添加不同的标签
    logStr.add(_getLabel(event.level));

    // 添加日期和时间
    logStr.add(DateTime.now().toString());

    // 添加日志消息
    logStr.add(event.message.toString());

    // 如果有错误，添加错误信息
    if (event.error != null) {
      logStr.add(event.error.toString());
    }

    return logStr;
  }

  String _getLabel(Level level) {
    if (level == Level.verbose) {
      return 'VERBOSE';
    } else if (level == Level.debug) {
      return 'DEBUG';
    } else if (level == Level.info) {
      return 'INFO';
    } else if (level == Level.warning) {
      return 'WARNING';
    } else if (level == Level.error) {
      return 'ERROR';
    } else {
      return 'WTF';
    }
  }
}
